package com.lekang.quartz.task;

import com.lekang.domain.Bill;
import com.lekang.dto.AddBillDto;
import com.lekang.service.IBillService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.YearMonth;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.util.List;

/**
 * @ClassName BillGenerationTask
 * @Description TODO
 * @Author cuiruitong
 * @Date 2025年10月21日 17:05
 * @Version 1.0
 */
@Component("billGenerationBill")
public class BillGenerationTask {

    @Autowired
    IBillService billService;
    public void generateBill() {
        System.out.println("生成账单");
//        第一次查询条件
        Bill bill = new Bill();
//        本月
        bill.setBillMonth(getCurrentYearMonth());
        System.out.println(getCurrentYearMonth()+"本月");
        bill.setBillType("月度账单");
        //查询所有账单列表
        List<Bill> bills = billService.selectBillList(null);
//        插入内容条件
        AddBillDto addBillDto = new AddBillDto();
        addBillDto.setBillType(bill.getBillType());

        for (Bill b : bills) {
            bill.setElderlyId(b.getElderlyId());
            List<Bill> bills1 = billService.selectBillList(bill);
//            System.out.println(bills1.size()+"大小"+bills1.toString());
            if (bills1.size() == 0) {
                addBillDto.setElderlyId(b.getElderlyId());
                System.out.println("当前老人id"+b.getElderlyId());
                boolean b1 = billService.addBillWithBillDetails(addBillDto, "auto");
//                System.out.println(b1);
            }else {
//                System.out.println("失败");
            }
        }
//        System.out.println(bills);
//        billService.addBillWithBillDetails(null,null);
    }




    //此刻年月
    public static String getCurrentYearMonth() {
        // 1. 获取当前日期（默认使用系统时区，建议显式指定时区避免差异）
        // 如需要北京时间，可使用 ZoneId.of("Asia/Shanghai")
        LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());

        // 2. 定义格式化器，指定输出格式为 "yyyy-MM"
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");

        // 3. 格式化当前日期，仅保留年和月
        return currentDate.format(formatter);
    }

    // 处理"YYYY-MM"格式，返回减去一个月后的同格式字符串
    public static String subtractOneMonth(String billMonth) {
        try {
            // 定义日期格式（匹配"YYYY-MM"）
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");

            // 1. 解析字符串为YearMonth对象
            YearMonth yearMonth = YearMonth.parse(billMonth, formatter);

            // 2. 减去一个月
            YearMonth previousMonth = yearMonth.minusMonths(1);

            // 3. 格式化回"YYYY-MM"字符串
            return previousMonth.format(formatter);

        } catch (DateTimeParseException e) {
            // 处理格式错误（如输入不是"YYYY-MM"）
            System.err.println("输入格式错误，必须是'YYYY-MM'格式：" + e.getMessage());
            return null; // 或根据业务需求抛出异常
        }
    }
}
